﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Services;
using System.Configuration;
using DataLayer.dbml;
using DataLayer.Controller;


public partial class services_CreateCase : cGlobal
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //this.autoComplete1.ContextKey = "1-899999115-00";
            //this.hdnServicio.Value = "a01T000000Lioa8IAB";            
            if (Request.QueryString["idServicio"] != null)
            {
                this.hdnServicio.Value = Request.QueryString["idServicio"].ToString();                
                //this.hdnServicio.Value = "a01Q0000002ajMV";
                this.loadService();
            }

            //this.hdnNIT.Value = "899999115-00";
            //this.autoComplete1.ContextKey = "1-899999115-00";
            if (Request.QueryString["NIT"] != null)
            {
                this.hdnNIT.Value = Request.QueryString["NIT"].ToString(); 
                //this.hdnNIT.Value = "899999115-00";
                this.autoComplete1.ContextKey = "1-" + this.hdnNIT.Value.ToString();
            }
                                                
            this.loadCombos();            
        }        
    }

    
    private void loadCombos()
    {
        DataTable dtTipoCaso = CaseController.GetListaTipoCaso();        
        dropDownFill(this.ddlTipoCaso, dtTipoCaso, "TIPO_CASO1", "TIPO_CASO1", "------", "-1");
        
        this.ddlMotivo.Items.Add(new ListItem("Seleccione un tipo de caso", "-1"));
    }

    private void loadService()
    {
        SERVICIO servicio = ServicesController.GetServiceById(this.hdnServicio.Value.ToString());

        if (servicio != null)
        {
            this.lblIdService.Text = servicio.ID_SERVICIO;
            this.lblService.Text = servicio.NOMBRE_SERVICIO;
            this.lblCPA.Text = servicio.NUMERO_CPA;
            this.lblTipoServicio.Text = servicio.TIPO_SERVICIO;
            //this.lblTecnologia.Text = servicio.TECNOLOGIA;
            this.lblEstado.Text = servicio.ESTADO_SERVICIO;
        }
    }


    protected void btnGuardar_Click(object sender, ImageClickEventArgs e)
    {
        //Se obtiene la info del servicio
        SERVICIO objServicio = new SERVICIO();
        try
        {
            objServicio = ServicesController.GetServiceById(this.hdnServicio.Value.ToString());
        }
        catch (Exception ex)
        {
            this.lblMensaje.Text = ex.Message;
            return;
        }        

        //SFAuthentication();

        DataLayer.SForceCase.parametrosCreacionCaso param = new DataLayer.SForceCase.parametrosCreacionCaso();
        param.strIdCasoSFDC = "";
        param.strCaseNumber = "";
        param.strNameRecordType = this.ddlTipoCaso.SelectedValue;
        param.strReason = this.ddlMotivo.SelectedValue;
        param.strProblemaEncontrado = "";
        param.strStatus = "Nuevo";
        param.strCreatedDate = DateTime.Today.ToString("dd/MM/yyyy");
        param.strClosedDate = "";
        param.strDescription = this.txtDescription.Text.Trim();
        param.strTiempoCasoAbierto = "";
        param.strAccountId = objServicio.ID_CUENTASFDC;
        param.strIdProyecto = objServicio.ID_PROYECTOSFDC;
        param.strIdOportunidad = objServicio.ID_OPORTUNIDADSDFC;
        param.strIdCuenta_IdClienteFinal = objServicio.ID_CUENTASDFC_ID_CLIENTEFINALSDFC;
        param.strIdServicio = objServicio.ID_SERVICIOSDFC;
        param.strPersonaReportaCaso = this.txtPersona.Text.Trim();
        param.strMailAlertas = this.txtMail.Text.Trim();
        param.strTelefono1 = this.txtTelefono.Text.Trim();                        

        
        DataLayer.SForceCase.creacionCasoRespuesta_cls resultado = SFController.CrearCaso(param);

        if (resultado.strEstadoTransaccion.Equals("Fallida"))
        {
            this.lblMensaje.Text = "No se realizó la transacción: " + resultado.strObservaciones;
            Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'>alert('No se realizo la transaccion: " + resultado.strObservaciones + "');</Script>");
        }            
        else
        {            
            this.lblMensaje.Text = "El caso ha sido creado con el número: " + resultado.strCodigoCaso;
            Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'>alert('El caso ha sido creado con el número: " + resultado.strCodigoCaso + "');</Script>");

            //Se crea el caso en las tablas del portal
            CASO caso = new CASO();
            caso.ID_CASOSDFC = resultado.strIdCasoSFDC;
            caso.ID_CASO = resultado.strCodigoCaso;
            caso.TIPO_CASO = this.ddlTipoCaso.SelectedValue;
            caso.MOTIVO_CASO = this.ddlMotivo.SelectedValue;
            caso.PROBLEMA_ENCONTRADO = string.Empty;
            caso.ESTADO_CASO = "Nuevo";
            caso.FECHA_HORA_APERTURA = resultado.dateFechaTransaccion;
            caso.DESCRIPCION = this.txtDescription.Text.Trim();
            caso.ID_CUENTASFDC = objServicio.ID_CUENTASFDC;
            caso.ID_PROYECTOSFDC = objServicio.ID_PROYECTOSFDC;
            caso.ID_OPORTUNIDADSDFC = objServicio.ID_OPORTUNIDADSDFC;
            caso.ID_CUENTASDFC_ID_CLIENTEFINALSDFC = objServicio.ID_CUENTASDFC_ID_CLIENTEFINALSDFC;
            caso.ID_SERVICIOSDFC = objServicio.ID_SERVICIOSDFC;            
            CaseController.Insert(caso);

            this.Limpiar();
        }

        //Registra log de transacciones
        LOG_TRANSACCION objLog = new LOG_TRANSACCION();
        objLog.TIPO_TRANSACCION = resultado.strTipoTransaccion;
        objLog.ELEMENTO_ENVIADO = DataLayer.Utilities.Utilidades.Serializar(param);
        objLog.ESTADO = resultado.strEstadoTransaccion;
        objLog.OBSERVACION = resultado.strObservaciones;
        objLog.ENVIOS = 1;
        LogTransactionController.Insert(objLog);
        
    }

    protected void ddlSearch_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Concatena el tipo de busqueda y el nit del usuario logueado
        this.autoComplete1.ContextKey = this.ddlSearch.SelectedValue.ToString() + "-" + this.hdnNIT.Value.ToString();
        this.txtBusqueda.Text = string.Empty;
    }

    private void Limpiar()
    {
        this.lblIdService.Text = string.Empty;
        this.lblService.Text = string.Empty;
        this.lblCPA.Text = string.Empty;
        this.lblTipoServicio.Text = string.Empty;
        //this.lblTecnologia.Text = string.Empty;
        this.lblEstado.Text = string.Empty;

        this.ddlMotivo.SelectedValue = "-1";
        this.ddlTipoCaso.SelectedValue = "-1";
        this.txtDescription.Text = string.Empty;
    }

    [WebMethod()]
    [System.Web.Script.Services.ScriptMethod()]
    public static string[] GetCompletionList(string prefixText, int count, string contextKey)
    {
        string tipoBusqueda = contextKey.Substring(0, contextKey.IndexOf("-"));
        string nit = contextKey.Substring(contextKey.IndexOf("-") + 1);
        return ServicesController.GetServiceSearch(tipoBusqueda, prefixText, nit);
    }


    protected void btnSeleccionar_Click(object sender, ImageClickEventArgs e)
    {
        //Se busca el id del servicio seleccionado y se guarda en el hidden field
        SERVICIO objServicio = ServicesController.GetByName(this.txtBusqueda.Text.Trim());

        if (objServicio != null)
        {
            this.hdnServicio.Value = objServicio.ID_SERVICIOSDFC;
            this.loadService();
        }
        else
        {
            this.Limpiar();
            Page.ClientScript.RegisterStartupScript(this.GetType(), "JS", "<script language='javascript'> alert('No se encontró el servicio'); </Script>");
        }
    }

    protected void ddlTipoCaso_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable dtMotivo = CaseController.GetListaMotivosByTipoCaso(this.ddlTipoCaso.SelectedValue);
        dropDownFill(this.ddlMotivo, dtMotivo, "MOTIVO1", "MOTIVO1", "------", "-1");
    }

}
